# 中国工商银行账户管理系统
# 1.	编程实现：仔细业务之间的包含关系，并完成以下编程需求，要适当提高代码的可复用性。
# a)	用户程序：账号（str：系统随机产生8位数字）、姓名(str)、密码(int:6位数字)、地址、存款余额(int)、开户行（银行的名称（str））
# b)	地址程序：国家(str)、省份(str)、街道(str)、门牌号(str)
# c)	银行程序：能存储100用户的库(字典)、本银行名称（比如：中国工商银行的昌平支行,str）
# i.	银行业务功能
# 1.	添加用户（传入参数：用户的所有信息。返回值：整型值（1：成功，2：用户已存在，3：用户库已满））
# a)	业务逻辑：
# 	先检查该用户的账号在库里是否存在。若不存在则在用户库里添加一个该用户并返回代号1
# 	若存在则返回代号2。另外在添加用户的时候检测用户库是否已注册满，若已满则返回代号3
# 2.	存钱（传入值：用户的账号、存取的金额。返回值：布尔类型值）
# a)	业务逻辑：
# 	先根据传入的账号信息查询用户库里是否有该用户。若没有则返回False
# 	若有，则将该用户的金额存进去。
# 3.	取钱（传入值：用户的账号，用户密码，取钱金额。返回值：整型值（0：正常，1：账号不存在，2：密码不对，3：钱不够））
# a)	业务逻辑：
# 	先根据账号信息来查询该用户是否存在，若不存在，则返回代号1，
# 	若存在，则继续判断密码是否正确，若不正确，则返回代号2。
# 	若账号密码都正确，则继续判断当前用户的金额是否满足要取出的钱，若不满足，则返回代号3，
# 	若满足，则将该用户的金额减去。
# 4.	转账（传入值：转出的账号，转入的账号，转出账号的密码，转出的金额。返回值：0：正常，1：账号不对，2密码不对，3钱不够）
# a)	业务逻辑：
# 	先查询用户库是否存在转出和转入的账号，若不存在则返回代号,1，
# 	若账号都存在则继续判断转出账号的密码是否正确，若不正确，则返回2，
# 	若正确则继续判断要转出的金额是否足够，若不够则返回3，
# 	否则正常转出，转出的账号用户金额要相对应的减少，转入的金额相对应的增加。
# 5.	查询账户功能（传入值：账号，账号密码，返回值：空）
# a)	业务逻辑：
# 	先根据账号判断用户库是否存在该用户，若不存在则打印提示信息：该用户不存在。
# 	否则继续判断密码是否正确。若不正确则打印相对应的错误信息。
# 	若账号和密码都正确，则将该用户的信息都打印出来，比如：当前账号：xxxx,密码:xxxxxx,余额：xxxx元，用户居住地址：xxxxxxxxxxxxx，当前账户的开户行：xxxxxxxxxx.
# d)	界面程序：在执行该入口程序时，就打印银行业务选择菜单：比如：
# i.
# ii.	然后就开始处理各种输入操作，直到业务处理完成!
# 答案：
#
import random


def get_address():
    country = input("请输入国家：")
    province = input("请输入省份：")
    street = input("请输入街道：")
    house_number = input("请输入门牌号：")
    return {"国家": country,
            "省份": province,
            "街道": street,
            "门牌号": house_number
            }


def user_registration():
    while True:
        id = random.randrange(10000000, 99999999)
        if id not in users_list:
            break
    while True:
        dengdu_name = input('请输入姓名：')
        if dengdu_name.isalpha():
            break
        else:
            print('请正确输入姓名。')
    while True:
        dengdu_password = input('请输入密码（6位数字）：')
        if dengdu_password.isdigit() and len(dengdu_password) == 6:
            break
        else:
            print('密码错误，请重新输入。')
    dengdu_addr = get_address()
    cunkuan = 5000
    kaihuhang = '中国工商银行'
    new_user = {"id": id,
                "姓名": dengdu_name,
                "密码": dengdu_password,
                "地址": dengdu_addr,
                "存款余额": cunkuan,
                "开户行": kaihuhang}
    return id,new_user


def yinhang_cunqian(id, denglu_name, cun_money):
    if id in users_list:
        user = users_list[id]
        if user["姓名"] == denglu_name:
            user["存款余额"] += cun_money
            print(f'存款成功！当前余额为：{user["存款余额"]}元')
        else:
            print("姓名不匹配。")
            return False
    else:
        print('用户不存在。')
    return False


def yinhang_quqian(id, password, qu_money):
    if id in users_list:
        user = users_list[id]
        if user["密码"] == password:
            if user["存款余额"] >= qu_money:
                user["存款余额"] -= qu_money
                print(f'取款成功！当前余额为：{user["存款余额"]}元')
            else:
                print("余额不足。")
                return 3
        else:
            print("密码错误。")
            return 2
    else:
        print("账号不存在。")
        return 1


def yinhang_zhuanzhang(chu_id, ru_id, chu_id_password, zhuan_money):
    if chu_id and ru_id in users_list:
        chu_user = users_list[chu_id]
        ru_user = users_list[ru_id]
        if chu_user["密码"] == chu_id_password:
            if chu_user["存款余额"] >= zhuan_money:
                chu_user["存款余额"] -= zhuan_money
                ru_user["存款余额"] += zhuan_money
                print(f'转账成功！当前转出账号{chu_user["id"]}的余额为{chu_user["存款余额"]}元,转入账号{ru_user["id"]}的余额为{ru_user["存款余额"]}元')
                return 0
            print('余额不足。')
            return 3
        print('密码错误。')
        return 2
    print('账号不存在。')
    return 1


def yinhang_chaxun(id, password):
    if id in users_list:
        user = users_list[id]
        if user["密码"] == password:
            print(f'账号id:{user["id"]} '
                  f'姓名:{user["姓名"]} '
                  f'密码:{user["密码"]} '
                  f'地址:{user["地址"]} '
                  f'存款余额:{user["存款余额"]} '
                  f'开户行:{user["开户行"]}')
        else:
            print('输入密码错误')
    else:
        print('该账号不存在')


def main():
    print('**********************************')
    print('*      中国工商银行                *')
    print('*      账户管理系统                *')
    print('*         v1.0                  *')
    print('**********************************\n')
    print('*1.开户                           *')
    print('*2.存钱                           *')
    print('*3.取钱                           *')
    print('*4.转账                           *')
    print('*5.查询                           *')
    print('*6.Bye!                          *')
    print('**********************************')
    while True:
        yewu = input('请在菜单中选择要办理的业务（1-6）:')
        if yewu == '1':
            id,new_user = user_registration()
            users_list.update({id:new_user})
            print(f'开户成功！您的账号id为：{new_user["id"]}')
            continue
        elif yewu == '2':
            id = int(input('请输入账号id：'))
            denglu_name = input('请输入姓名：')
            cun_money = int(input('请输入要存的金额：'))
            yinhang_cunqian(id, denglu_name, cun_money)
            continue
        elif yewu == '3':
            id = int(input('请输入账号id：'))
            password = int(input('请输入密码：'))
            qu_money = int(input('请输入要取的金额：'))
            yinhang_quqian(id, password, qu_money)
            continue
        elif yewu == '4':
            chu_id = int(input('请输入转出账号id：'))
            ru_id = int(input('请输入转入账号id：'))
            chu_id_password = int(input('请输入转出账号密码：'))
            zhuan_money = int(input('请输入要转的金额：'))
            yinhang_zhuanzhang(chu_id, ru_id, chu_id_password, zhuan_money)
            continue
        elif yewu == '5':
            id = int(input('请输入账号id：'))
            password = int(input('请输入密码：'))
            yinhang_chaxun(id, password)
            continue
        elif yewu == '6':
            print('Bye!')
            exit()
        else:
            print('输入错误,请重新输入。')
            continue


users_list = {
    12345678:{
        "id": 12345678,
        "姓名": '张三三',
        "密码": 123456,
        "地址": {"国家": "中国",
                 "省份": "北京",
                 "街道": "朝阳",
                 "门牌号": 123},
        "存款余额": 50000,
        "开户行": "中国工商银行"},
    12345677:{"id": 12345677,
     "姓名": '李四四',
     "密码": 123456,
     "地址": {"国家": "中国",
              "省份": "河南",
              "街道": "金沙",
              "门牌号": 45},
     "存款余额": 3000,
     "开户行": "中国工商银行"}
}
if __name__ == '__main__':
    main()
